package com.frank.im.db;

import java.util.ArrayList;

import android.content.Context;

import com.frank.im.bean.HistorySession;
import com.frank.im.bean.MsgCont;
import com.frank.im.bean.MsgContExp;
import com.frank.im.bean.SessionRecord;
import com.frank.im.bean.SysMsg;
import com.frank.im.bean.SysMsgCont;
import com.frank.im.bean.UserChatMsg;
import com.frank.im.bean.UserTemp;

/**
 * im通讯数据访问接口
 * 
 * @author Frank
 * @version 1.0 Create by 2016.4.11
 * @param <E>
 */
public interface ImDao {

	/**
	 * 初始化
	 * 
	 * @param context
	 */
	public void onInit(Context context);

	/**
	 * 关闭
	 */
	public void closeDB();

	/**
	 * 是否存在
	 * 
	 * @param type
	 *            1临时用户，2会话记录表,3消息内容表,4消息内容表,5系统消息内容表
	 * @param id
	 * @return
	 */
	boolean isExists(int type, String... id);

	/**
	 * 
	 * @param tableType
	 *            1会话记录表 ，2消息内容表
	 * @param operateType
	 *            1按id删除，2删除全部
	 * @param id
	 * @return
	 */
	boolean del(int tableType, int operateType, String... id);

	/**
	 * 插入临时用户表
	 * 
	 * @param userTemp
	 * @return
	 */
	public long insertUserTemp(UserTemp userTemp);

	/**
	 * 插入消息记录表
	 * 
	 * @param sessionRecord
	 * @return
	 */
	public long insertSessionRecord(SessionRecord sessionRecord);

	/**
	 * 插入消息内容表
	 * 
	 * @param sessionRecord
	 * @return
	 */
	public long insertMsgCont(MsgCont msgCont, MsgContExp contExp);

	/**
	 * 插入系统消息内容表
	 * 
	 * @param sessionRecord
	 * @return
	 */
	public long insertSysMsgCont(SysMsgCont sysMsgCont);

	/**
	 * 获得未读系统消息或者未读用户消息的条数
	 * 
	 * @param type
	 *            1用户消息，2系统消息 ,3全部未读消息
	 * @param id
	 * @return
	 */
	public int getNoreadNum(int type, String... id);

	/**
	 * 更新消息内容的阅读状态
	 * 
	 * @param type
	 *            1用户消息，2系统消息
	 * @param id
	 */
	public boolean updateMsgContReadStatus(int type, String... id);

	/**
	 * 更新消息内容的发送状态
	 * 
	 * @param id
	 */
	public boolean updateMsgContSendStatus(int type, String... id);

	/**
	 * 更新消息内容的发送失败
	 * 
	 */
	public boolean updateMsgContSendFailed();

	/**
	 * 更新消息内容的服务器id
	 * 
	 * @param id
	 */
	public boolean updateMsgContServiceId(int contId, String... id);

	/**
	 * 更新消息记录未读消息数量
	 * 
	 * @param id
	 */
	public boolean updateSessionReadStatus(int num, String... id);

	/**
	 * 更新消息记录内容
	 * 
	 * @param id
	 */
	public boolean updateSessionCont(String newCont, String newContTime,
			String... id);

	/**
	 * 获得消息记录表
	 * 
	 * @return
	 */
	public ArrayList<HistorySession> getHistorySessions();

	/**
	 * 获得单用户的聊天
	 * 
	 * @param type
	 *            1第一页，2其他页，3累加
	 * @param id
	 * @return
	 */
	public ArrayList<UserChatMsg> getUserChatMsgs(int type, String... id);

	/**
	 * 获得系统消息列表
	 * 
	 * @param type
	 *            1第一页，2其他页，3累加
	 * @param id
	 * @return
	 */
	public ArrayList<SysMsg> getSysMsgs(int type, String... id);

	/**
	 * 是否已读
	 * 
	 * @param type
	 *            1用户消息，2系统消息
	 * @param id
	 * @return
	 */
	public boolean isRead(int type, String... id);

	/**
	 * 更新用户信息
	 * 
	 * @param userTemp
	 * @return
	 */
	public boolean updateUserInfo(UserTemp userTemp);

}
